首页 技术 正文
技术 2022年11月15日
0 收藏 861 点赞 4,580 浏览 8873 个字

  java的web应用打包方式一般为war它和jar的区别就是包含了更多的资源和文件,如JSP文件,静态资源文件,servlet等等。war包的核心就WEB-INF文件夹下必须有一个web.xml 的配置文件,子目录classes包含所有该项目的类,子目录lib包含所有的依赖,这两个目录都会在运行的时候添加到classpath下。

maven对于web项目有统一的格式。项目代码和资源还是放在src/main/java和src/main/resources下,web资源目录在src/main/webapp/。webapp下就包含WEB-INF,css, js, jsp,等等文件夹。

这里account-service模块是综合之前三个模块,提供总的服务,直接看代码:

SignUpRequest对应表单的信息:

public class SignUpRequest {
private String id; private String email; private String name; private String password; private String confirmPassword; private String captchaKey; private String captchaValue; private String activateServiceUrl;public String getId() {
return id;
}public void setId(String id) {
this.id = id;
}public String getEmail() {
return email;
}public void setEmail(String email) {
this.email = email;
}public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public String getPassword() {
return password;
}public void setPassword(String password) {
this.password = password;
}public String getConfirmPassword() {
return confirmPassword;
}public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}public String getCaptchaKey() {
return captchaKey;
}public void setCaptchaKey(String captchaKey) {
this.captchaKey = captchaKey;
}public String getCaptchaValue() {
return captchaValue;
}public void setCaptchaValue(String captchaValue) {
this.captchaValue = captchaValue;
}public String getActivateServiceUrl() {
return activateServiceUrl;
}public void setActivateServiceUrl(String activateServiceUrl) {
this.activateServiceUrl = activateServiceUrl;
}
}

  接口实现:

public interface AccountService {
String generateCaptchaKey() throws AccountServiceException;
byte[] generateCaptchaImage(String captchaKey)
throws AccountServiceException;
void signUp(SignUpRequest signUpRequest) throws AccountServiceException;
void activate(String activationNumber) throws AccountServiceException;
void login(String id, String password) throws AccountServiceException;
}public class AccountServiceImpl implements AccountService {
private AccountPersistService accountPersist;
private AccountEmailService accountEmail;
private AccountCaptchaService accountCaptcha;
private Map<String, String> activationMap = new HashMap<String, String>();public AccountPersistService getAccountPersist() {
return accountPersist;
}
public void setAccountPersist(AccountPersistService accountPersist) {
this.accountPersist = accountPersist;
}
public AccountEmailService getAccountEmail() {
return accountEmail;
}
public void setAccountEmail(AccountEmailService accountEmail) {
this.accountEmail = accountEmail;
}
public AccountCaptchaService getAccountCaptcha() {
return accountCaptcha;
}
public void setAccountCaptcha(AccountCaptchaService accountCaptcha) {
this.accountCaptcha = accountCaptcha;
}
public String generateCaptchaKey() throws AccountServiceException {
try {
return accountCaptcha.generateCaptchaKey();
} catch (Exception e) {
throw new AccountServiceException("Unable to generate captcha key",e);
}}
public byte[] generateCaptchaImage(String captchaKey)
throws AccountServiceException {
try {
return accountCaptcha.generateCaptchaImage(captchaKey);
} catch (Exception e) {
throw new AccountServiceException("Unable to generate captcha image",e);
}}
public void signUp(SignUpRequest signUpRequest)
throws AccountServiceException {
try
{
if (!signUpRequest.getPassword().equals(signUpRequest.getConfirmPassword())) {
throw new AccountServiceException("password donnot match");
}if (!accountCaptcha.validateCaptcha(signUpRequest.getCaptchaKey(),
signUpRequest.getCaptchaValue())) {
throw new AccountCaptchaException("captcha not match");
}
Account account = new Account();
account.setId(signUpRequest.getId());
account.setEmail(signUpRequest.getEmail());
account.setName(signUpRequest.getName());
account.setPassword(signUpRequest.getPassword());
account.setActivated(false);accountPersist.createAccount(account);String activationId = RandomGenerator.getRandomString();
activationMap.put(activationId, account.getId());
String link = signUpRequest.getActivateServiceUrl().endsWith("/") ?
signUpRequest.getActivateServiceUrl()+activationId : signUpRequest.getActivateServiceUrl()+
"?key="+activationId;
accountEmail.sendMail(account.getEmail(), "please activate Your email", link);} catch (AccountCaptchaException e) {
throw new AccountServiceException("unable to validate captcha", e);
} catch (AccountEmailException e) {
throw new AccountServiceException("unable to send email", e);
} catch (AccountPersistException e) {
throw new AccountServiceException("unable to create account", e);
}
}
public void activate(String activationId)
throws AccountServiceException {
String accountId = activationMap.get(activationId);if (accountId == null) {
throw new AccountServiceException("invalid account activated id");
}
try {
Account account = accountPersist.readAccount(accountId);
account.setActivated(true);
accountPersist.updateAccount(account);
} catch (Exception e) {
throw new AccountServiceException("Unable to activate");
}}
public void login(String id, String password)
throws AccountServiceException {
try {
Account account = accountPersist.readAccount(id);
if (account == null) {
throw new AccountServiceException("account donnot exits");
}
if (!account.isActivated()) {
throw new AccountServiceException("account not activate");
}
if (!account.getPassword().equals(password)) {
throw new AccountServiceException("password is error");
}
} catch (AccountPersistException e) {
throw new AccountServiceException("Unable to logging", e);
}
}
}

  注意service的配置文件中pom必须将email、captcha、persist这三个模块包含进去,依赖关系:

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>account-email</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>account-persist</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>account-captcha</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
<version>${greenmail.version}</version>
<scope>test</scope>
</dependency>

account-web模块:

pom需要依赖servlet,service模块,其他的配置和一般的maven项目一样。

<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>account-service</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
</dependencies>

web.xml:定义了一些servlet,具体的servlet实现代码在src/main/java 下。

<web-app>
<display-name>Sample Maven Project: Account Service</display-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/account-persist.xml
classpath:/account-captcha.xml
classpath:/account-email.xml
classpath:/account-service.xml
</param-value>
</context-param>
<servlet>
<servlet-name>CaptchaImageServlet</servlet-name>
<servlet-class>com.hust.silence.account.web.CaptchaImageServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>SignUpServlet</servlet-name>
<servlet-class>com.hust.silence.account.web.SignUpServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ActivateServlet</servlet-name>
<servlet-class>com.hust.silence.account.web.ActivateServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.hust.silence.account.web.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CaptchaImageServlet</servlet-name>
<url-pattern>/captcha_image</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SignUpServlet</servlet-name>
<url-pattern>/signup</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ActivateServlet</servlet-name>
<url-pattern>/activate</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>

  这个给出其中一个servlet的代码:对用户login的处理。

public class LoginServlet
extends HttpServlet
{
private static final long serialVersionUID = 929160785365121624L; private ApplicationContext context; @Override
public void init()
throws ServletException
{
super.init();
context = WebApplicationContextUtils.getWebApplicationContext( getServletContext() );
} @Override
protected void doPost( HttpServletRequest req, HttpServletResponse resp )
throws ServletException,
IOException
{
String id = req.getParameter( "id" );
String password = req.getParameter( "password" ); if ( id == null || id.length() == 0 || password == null || password.length() == 0 )
{
resp.sendError( 400, "incomplete parameter" );
return;
} AccountService service = (AccountService) context.getBean( "accountService" ); try
{
service.login( id, password );
resp.getWriter().print( "Login Successful!" );
}
catch ( AccountServiceException e )
{
resp.sendError( 400, e.getMessage() );
}
}
}

  关于jsp界面只有两个:login.jsp和signup.jsp这个对于接触过web 的而言很简单了。

基本上这些内容大概就可以说明maven的好处和使用方法了,经过书上的讲解和自己的实际操练,对maven的使用会更加熟悉,当然自己用到的只是maven的皮毛,它的功能可 不仅仅只有这些,这些只是它的核心功能。如果能在实际项目中运用,并去学习的话会对maven有更深的了解,鉴于时间关系,我只能先了解个大概,之后若需要的时候能够快速的使用起来,也希望能在实验室项目中好好的使用这个工具。(有机会和时间的话,尝试重构实验室之前的web项目代码)。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,488
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,487
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,127
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,289