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项目代码)。

maven小项目注册服务(三)--web模块的更多相关文章

  1. maven小项目注册服务(二)--captcha模块

    验证码生成模块,配置信息基本和前面的模块一样.account-captcha需要提供的服务是生成随机的验证码主键,然后用户可以使用这个主键要求服务生成一个验证码图片,这个图片对应的值应该是随机的,最后 ...

  2. maven小项目注册服务(一)--email和persist模块

    跟着书里的讲解,跟着做了一遍该项目: 首先明白注册账户的需求: 账号的lD和Email地址都可以用来唯一地标识某个用户,而显示名称则用来显示在页面下,方便浏览.注册的时候用户还需要输入两次密码,以确保 ...

  3. Maven实现项目构建直接部署Web项目到Tomcat

    Maven实现项目构建直接部署Web项目到Tomcat配置如下: 1.Tomcat的用户及权限配置:在conf目录下,找到tomcat-users.xml,添加manager权限的用户. <ro ...

  4. 一、基础项目构建,引入web模块,完成一个简单的RESTful API

    一.Spring Boot的主要优点: 为所有Spring开发者更快的入门 开箱即用,提供各种默认配置来简化项目配置 内嵌式容器简化Web项目 没有冗余代码生成和XML配置的要求 二.使用maven构 ...

  5. idea结合maven小项目

    整体构造 (修改 POM 文件 )parent <?xml version="1.0" encoding="UTF-8"?> <project ...

  6. 基础项目构建,引入web模块,完成一个简单的RESTful API 转载来自翟永超

    简介 在您第一次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复粘贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot ...

  7. Yii2项目高级模版 三个模块在同一个目录下的重定向配置

    最近做项目用到的,非常好用. 修改 advanced/backend/config/main.PHP 文件如下: return [ 'homeUrl' => '/admin', 'compone ...

  8. Eclipse使用Maven jetty/tomcat:run命令启动web项目

    Eclipse安装好m2e插件,使用Maven构建项目后,启动web项目就行就非常简单了,如下所示. 操作步骤: 1.右键你的项目 -> Run As -> Run Configurati ...

  9. 基于vue 、vue-router 、firebase的todolist小项目

    第一次写博客,都不知道改怎么写的好. 本着一颗学习的心,也希望一段时间后再回来在看看自己写的代码,会不会让自己有种不忍直视的念头 *-* 还是先上图吧~ 这是首页,主要是展示所有的列表页面,可以通过输 ...

随机推荐

  1. phpcms v9 企业黄页系统发布没有表单出现的解决方案

    第一种解决方案: 第一步:把yp_UTF8压缩文件解压得到:api.caches.phpcms.statics四个文件夹. 第二步:把这四个文件夹分别覆盖已安装好的phpcms系统根目录下的文件夹.这 ...

  2. Linux内核分析作业二—操作系统是如何工作的

    一.实验:简单的时间片轮转多道程序内核代码运行与分析 my_start_kernel之前都是硬件初始化,它是操作系统的执行入口,每循环100000次就进行一次打印. 执行更加简单,每次时钟中断时都会调 ...

  3. Jquery 固定悬浮层以及固定表头

    /* =========================================================== * jquery.autofix_anything.js v1 * === ...

  4. lamada 表达式之神奇的groupby

    少说话多干活 先定义一个测试用的实体,接下来会用字段Name进行分组的 public class TestToRun { public string Name { get; set; }//名称 pu ...

  5. 如何解决Mac与iPhone之间handoff连接问题

    首先账户以及设备handoff开关问题不再赘述.主要是昨天发现的一个小技巧 当确认所有设备的iCloud账号统一.蓝牙打开.处在同一WiFi下的前提下,我的iPhone和Mac仍然handoff连接有 ...

  6. C#中类型分析中的常见问题 Type - 转

    http://www.cnblogs.com/yuanyuan/archive/2012/08/16/2642281.html 写代码的时候经常需要分析已有类型的信息例如:分析现有类型自动生成类, 或 ...

  7. BZOJ 4031: [HEOI2015]小Z的房间 Matrix-Tree定理

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4031 题解: Matrix-tree定理解决生成树计数问题,其中用到高斯消元法求上三角矩 ...

  8. js--eval函数

    前言: js的eval函数很牛叉,用了几次--不过都没有记录.试想:如果没有EXT.JQery,怎样将json字符串转换为对象呢? 示例: 定义2个字符串变量s1.s2.其中s1表示一个对象:s2表示 ...

  9. Maven--(一个坑)在settings.xml文件中添加mirrors导致无法新建Maven项目

    这是用新电脑第一次创建Maven项目--当然是一个测试项目.已经差不多忘了该怎样做,所以参考我的博客:http://www.cnblogs.com/wql025/p/4996486.html,这应该是 ...

  10. SQL SERVER时间函数

    本篇文章还是学习<程序员的SQL金典>内容的记录,此次将讲解的是SQL SERVER的时间函数. 本文只讲SQL SERVER支持的时间函数(其它数据库这里就不罗列了,想看更多的可以关注& ...